/**
 * 监控系统类型定义
 */

// 基础监控数据接口
export interface BaseMonitorData {
  from?: string; // 来源标识
  level: 'info' | 'warn' | 'error' | 'fatal'; // 日志级别
  type?: 'js' | 'api' | 'network' | 'vue' | 'performance'; // 错误类型
  message: string; // 错误信息
  url?: string; // 错误发生的URL
  stack?: string; // 错误堆栈
  userAgent?: string; // 用户代理
  timestamp?: number; // 时间戳
  [key: string]: any; // 其他扩展字段
}

// 性能监控数据接口
export interface PerformanceMetrics {
  // Core Web Vitals
  FCP?: number; // First Contentful Paint
  FP?: number; // First Paint
  LCP?: number; // Largest Contentful Paint
  FID?: number; // First Input Delay
  CLS?: number; // Cumulative Layout Shift
  TTFB?: number; // Time to First Byte

  // 自定义指标
  domContentLoaded?: number;
  loadComplete?: number;
  resourceCount?: number;
  bundleSize?: number;

  // 页面性能数据
  pageLoadTime?: number; // 页面加载总耗时
  redirectionTime?: number; // 重定向耗时
  domainLookupTime?: number; // 域名解析耗时
  serverConnectionTime?: number; // 建立连接耗时
  serverResponseTime?: number; // 服务器响应耗时
  pageDownloadTime?: number; // HTML下载耗时
  documentInteractiveTime?: number; // DOM就绪耗时
  documentContentLoadedTime?: number; // DOM/CSSOM/JS完成耗时

  // 增强指标
  performanceScore?: number; // 性能评分
  longTaskCount?: number; // 长任务数量
  totalBlockingTime?: number; // 总阻塞时间
  memoryUsage?: {
    used: number;
    total: number;
    limit: number;
  };
}

// JavaScript错误信息
export interface JavaScriptErrorInfo {
  type: 'javascript' | 'resource' | 'promise';
  originalMessage: string;
  chineseMessage: string;
  source?: string;
  line?: number;
  column?: number;
  stack?: string;
  timestamp: number;
}

// 网络错误信息
export interface NetworkErrorInfo {
  type: 'fetch' | 'xhr';
  method: string;
  url: string;
  status?: number;
  statusText?: string;
  originalMessage: string;
  chineseMessage: string;
  requestData?: any;
  responseData?: any;
  timestamp: number;
  duration?: number;
}

// Vue错误信息
export interface VueErrorInfo {
  message: string;
  component?: string;
  stack?: string;
  timestamp: number;
}

// 监控配置接口
export interface MonitorConfig {
  projectName: string;
  reportHost: string;
  reportUrl: string;
  enableConsoleLog: boolean;
  enableReport: boolean;
  // 性能优化配置
  maxCacheSize: number; // 最大缓存数量
  batchSize: number; // 批量上报大小
  flushInterval: number; // 上报间隔(ms)
  sampleRate: number; // 采样率
  maxRetries: number; // 最大重试次数
  retryDelay: number; // 重试延迟(ms)
  // 功能开关
  enablePerformanceMonitor: boolean;
  enableErrorMonitor: boolean;
  enableUserBehavior: boolean;
}

// 用户行为数据接口
export interface UserBehaviorData {
  type: 'click' | 'scroll' | 'input' | 'navigation';
  target?: string;
  value?: string;
  timestamp: number;
  path: string;
}

// 缓存项接口
export interface CacheItem {
  data: BaseMonitorData;
  timestamp: number;
  retryCount: number;
}
